from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
import jieba


def dictVectorizerDemo():
    """
    字典特征值提取
    :return:
    """
    data = [{"city": "北京", "temperature": -1},
            {"city": "上海", "temperature": 11},
            {"city": "广州", "temperature": 30},
            {"city": "乌鲁木齐", "temperature": -20},
            {"city": "西藏", "temperature": 8}, ]

    transfer = DictVectorizer(sparse=False)
    fitData = transfer.fit_transform(data)
    print(fitData)
    """ 
    结果：
    [[  0.   0.   1.   0.   0.  -1.]
     [  1.   0.   0.   0.   0.  11.]
     [  0.   0.   0.   1.   0.  30.]
     [  0.   1.   0.   0.   0. -20.]
     [  0.   0.   0.   0.   1.   8.]]
    """

    names = transfer.get_feature_names_out()
    print(names)
    """
    结果：
    ['city=上海' 'city=乌鲁木齐' 'city=北京' 'city=广州' 'city=西藏' 'temperature']
    """

    return None


def dictVectorizerDemo2():
    """
    字典特征值提取
    :return:
    """
    data = [{"city": "北京", "temperature": -1},
            {"city": "上海", "temperature": 11},
            {"city": "广州", "temperature": 30},
            {"city": "乌鲁木齐", "temperature": -20},
            {"city": "西藏", "temperature": 8}, ]

    transfer = DictVectorizer(sparse=True)  # sparse默认True
    fitData = transfer.fit_transform(data)
    print(fitData)
    """ 
    结果：
  (0, 2)	1.0
  (0, 5)	-1.0
  (1, 0)	1.0
  (1, 5)	11.0
  (2, 3)	1.0
  (2, 5)	30.0
  (3, 1)	1.0
  (3, 5)	-20.0
  (4, 4)	1.0
  (4, 5)	8.0
    """

    names = transfer.get_feature_names_out()
    print(names)
    """
    结果：
    ['city=上海' 'city=乌鲁木齐' 'city=北京' 'city=广州' 'city=西藏' 'temperature']
    """

    return None


def englishDemo():
    data = ["Smile and silence are two powerful tools.",
            "Smile is the way to solve many problems.",
            "Silence is the way to avoid many problems."]

    transfer = CountVectorizer()
    fitData = transfer.fit_transform(data)
    article = transfer.get_feature_names_out(fitData)
    print("文本特征值提取结果：", fitData)
    print("文本特征值提取toarray()：", fitData.toarray())
    print("返回特征值名字：", article)
    """
    结果：
    文本特征值提取结果：   (0, 8)	1
      (0, 0)	1
      (0, 7)	1
      (0, 1)	1
      (0, 13)	1
      (0, 5)	1
      (0, 12)	1
      (1, 8)	1
      (1, 3)	1
      (1, 10)	1
      (1, 14)	1
      (1, 11)	1
      (1, 9)	1
      (1, 4)	1
      (1, 6)	1
      (2, 7)	1
      (2, 3)	1
      (2, 10)	1
      (2, 14)	1
      (2, 11)	1
      (2, 4)	1
      (2, 6)	1
      (2, 2)	1
    文本特征值提取toarray()： [[1 1 0 0 0 1 0 1 1 0 0 0 1 1 0]
     [0 0 0 1 1 0 1 0 1 1 1 1 0 0 1]
     [0 0 1 1 1 0 1 1 0 0 1 1 0 0 1]]
    返回特征值名字： ['and' 'are' 'avoid' 'is' 'many' 'powerful' 'problems' 'silence' 'smile'
     'solve' 'the' 'to' 'tools' 'two' 'way']
    """
    return None


def cutWord(word):
    result = " ".join(list(jieba.cut(word)))
    # print("cut word =", result)
    return result


def chinessDemo():
    data = ["微笑和沉默是两把利器：微笑解决很多问题，沉默避免许多问题。",
            "生活就像骑单车，只有不断前进，才能保持平衡。",
            "最幸福的人不是拥有最好一切的人，而是把一切都变成最好的人。"]
    txtList = []

    for txt in data:
        txtList.append(cutWord(txt))

    transfer = CountVectorizer()
    fitData = transfer.fit_transform(txtList)
    article = transfer.get_feature_names_out()
    print("文本特征值提取结果：", fitData)
    print("文本特征值提取toarray()：", fitData.toarray())
    print("返回特征值名字：", article)
    '''
    cut word = 微笑 和 沉默 是 两把 利器 ： 微笑 解决 很多 问题 ， 沉默 避免 许多 问题 。
    cut word = 生活 就 像 骑单车 ， 只有 不断前进 ， 才能 保持平衡 。
    cut word = 最 幸福 的 人 不是 拥有 最好 一切 的 人 ， 而是 把 一切 都 变成 最好 的 人 。
    文本特征值提取结果：   (0, 10)	2
      (0, 14)	2
      (0, 3)	1
      (0, 5)	1
      (0, 17)	1
      (0, 9)	1
      (0, 20)	2
      (0, 19)	1
      (0, 18)	1
      (1, 15)	1
      (1, 21)	1
      (1, 7)	1
      (1, 1)	1
      (1, 11)	1
      (1, 4)	1
      (2, 8)	1
      (2, 2)	1
      (2, 12)	1
      (2, 13)	2
      (2, 0)	2
      (2, 16)	1
      (2, 6)	1
    文本特征值提取toarray()： [[0 0 0 1 0 1 0 0 0 1 2 0 0 0 2 0 0 1 1 1 2 0]
     [0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1]
     [2 0 1 0 0 0 1 0 1 0 0 0 1 2 0 0 1 0 0 0 0 0]]
    返回特征值名字： ['一切' '不断前进' '不是' '两把' '保持平衡' '利器' '变成' '只有' '幸福' '很多' '微笑' '才能' '拥有' '最好'
     '沉默' '生活' '而是' '解决' '许多' '避免' '问题' '骑单车']
    '''
    return None


def tfidfVectorizerDemo():
    data = ["第一次见到老板娘，是在一个夏夜。我到现在还记得，那天晚上的月光特别亮，但我无心欣赏。",
            "当时我因为没钱，已经一天没吃东西，便想趁着深夜人少，出来翻一下垃圾筒，看能不能找到点食物。",
            "我是个来自山村的年轻人。没学历、没工作。但其实我读书时的成绩很好，中考我的成绩全县前十。",
            "只因为那年与我相依为命的爷爷中风，所以我辍学回家照顾爷爷。顺便继承了祖传的中医手艺，给村里人治些小病。",
            "二十三岁那年，爷爷过世了。我决定到外面闯—闯。我带着仅有的两百块，来到省城。听村里在省城打工的人讲，",
            "省城到处都是机会。结果我在城里呆了一个月，却还是没找到工作。遇到老板娘的那天晚上，我已经身无分文，",
            "一天一夜没有吃一点东西。原本我可以捡点别人不要的东西吃，可是我脸皮浅，只能等到深夜才出来。",
            "我好不容易在一个垃圾筒里捡到两个馒头，还没来的及吃，便被一个醉醺醺的女人撞倒在地。",
            "好不容易捡到的馒头，也掉进污水里。那个女人撞了我，还骂我眼瞎。我当时已经没力气争辩了，只能坐在地上喘气。",
            "那个女人又骂我装，想碰瓷。好在这时候我的老板娘走过来，替我说了句公道话。",
            "那个女人才骂骂咧咧地走了。我至今依然还记得那天的场景。老板娘弯腰注视着我。在夜晚路灯的映衬下，老板娘看起来格外神圣。",
            "那天老板娘穿着海棠红的长袖线衣，腰很细，秀发挽成高高的马尾，全身透着温婉知性的美。最让我不能忘记的，是她那双漂亮的明眸。",
            "当老板娘那双明眸看着我的时候，我感觉自己冰冷的内心，如同照进了一缕阳光。"]
    txtList = []

    for txt in data:
        txtList.append(cutWord(txt))

    transfer = TfidfVectorizer()
    fitData = transfer.fit_transform(txtList)
    article = transfer.get_feature_names_out()
    print("文本特征值提取结果：", fitData)
    print("文本特征值提取toarray()：", fitData.toarray())
    print("返回特征值名字：", article)
    return None

# demo()
# demo2()
# demo3()
# chinessDemo()
tfidfVectorizerDemo()
